/**
 * @description 骨医快线app.js v2.0
 */
//mui.js => m
//template.js => t
(function(m, t, owner){
	
    // Config  
    // =============================================================================================
	/**
	 * @description App配置参数
	 * private
	 */
	var appConfig = {
		ENVIRONMENT: 'pro',
		DEVELOP_REQUEST_URL: 'http://mtest.doctomate.com/orths/api/',
		PRODUCT_REQUEST_URL: 'http://api.orthexpress.com/orths/api/',
		UPLOAD_URL: 'http://7xt1gr.com1.z0.glb.clouddn.com',
		/**
		 * @description 获取请求路径
		 */
		getRequestUrl: function(env){
			var env = env || this.ENVIRONMENT;
			return env === 'pro' ? this.PRODUCT_REQUEST_URL : this.DEVELOP_REQUEST_URL;
		}
	}
	
    // Net  
    // =============================================================================================
	/**
	 * @description app网络层，目前只负责处理app向服务器端发送请求;
	 * 依赖mui.js => m  || appConfig
	 */
	var net = {
		baseUrl: function(){
			return appConfig.getRequestUrl();
		},
		/**
		 * @description 网络请求,依赖mui.js,只返回请求成功的结果
		 * @param {String} url 请求路径
		 * @param {String} method 请求方式：'post','get'
		 * @param {Object} paramObj 请求参数
		 * @param {Function} CB 请求成功回调
		 */
		request: function(url, method, param, CB){
			var url    = this.baseUrl() + url,
				method = method || 'get',
				param  = (method === 'post' ? JSON.stringify(param) : param) || {},
				CB     = CB || m.noop || function(){};
			
			// 只有在webview中可用
			m.plusReady(function(){
				if(method === 'get' || 'post'){
					m[method](url, param, function(data){
						if(data && data.code === '100')return CB(data);
					});
				} 
			});
		},
		/**
		 * @description ajax请求，返回请求失败后的状态，测试中使用，不推荐生产环境使用
		 * @param {String} url
		 * @param {Object} param
		 * @param {String} method
		 * @param {Function} successCB
		 * @param {Function} errorCB
		 */
		ajax : function(url, param, method, successCB, errorCB){
			var url       = this.baseUrl + url,
				param 	  = (method === 'post' ? JSON.stringify(param) : info),
				successCB = successCB || m.noop,
				errorCB   = errorCB || m.noop;
			
			console.log(url);
			console.log(method !== 'post' ? JSON.stringify(info) : info);
			
			m.plusReady(function(){
				m.ajax(url,{
					data:param,
					dataType:'json',//服务器返回json格式数据
					type:method,//HTTP请求类型
					success:function(data){
						//服务器返回响应，根据响应结果，分析是否登录成功；
						return successCB(data);
					},
					error:function(xhr,type,errorThrown){
						//异常处理；
						console.log(xhr.status+'\n'+type+'\n'+errorThrown);
						return errorCB(xhr.response+'\n'+type+'\n'+errorThrown);
					}
				});
			})
		}
	}

	// Proxy
    // =============================================================================================
	/**
	 * @description 依赖mui.js/template.js，封装了一些常用的方法
	 */
	var proxy = {
		/**
		 * @description 打开指定的url
		 * @param {String} url
		 * @param {Object} data
		 */
		to: function(url, data){
			var url  = url || '',
				data = data || {};
				
			m.openWindow({
				url: url,
				waiting: {
					autoShow: false
				},
				extras: data,
			});
		},
		/**
		 * @description 根据指定模板、数据去渲染某DOM
		 * @param {String} renderDomId
		 * @param {String} templateId
		 * @param {Object} data
		 */
		render: function(domId, templateId, data){
			var data       = data || {},
				domId      = domId || '',
				templateId = templateId || '';
				
			document.getElementById(domId).innerHTML = t('tmp-usually', tmpData);
		},
		/**
		 * @description 监听某一组件的跳转事件,需要子组件上存在data-page（跳转路径），常用于监听button和li标签
		 * @param {String} parentDom
		 * @param {String} childDom
		 */
		skipListener: function(parentDom, childDom, data){
			var that = this;
			
			m(parentDom).on('tap', childDom, function(){
				that.to(this.dataset.page, data);
			})
		}
	}

	// Storage
    // =============================================================================================
	/**
	 * @description 本地存储，html5的localStorage
	 */
	var storage = {
		/**
		 * @description 获取存储在localStorage中的项目
		 * @param {String} itemName
		 */
		get: function(itemName){
			var itemName = itemName;
			
			if(!itemName)return console.error('请输入要查询的项目名称');
			
			var item = localStorage.getItem(itemName) || '{}';
			return JSON.parse(item);
		},
		/**
		 * @description 修改localStorage中的项目
		 * @param {String} itemName
		 * @param {Object} data
		 */
		set: function(itemName, data){
			var data     = data || {}, 
				itemName = itemName;
			
			if(!itemName)return console.error('请输入要查询的项目名称');
			
			localStorage.setItem(itemName, JSON.stringify(data));
		},
		/**
		 * @description 清空本地存储
		 */
		clear: function(){
			localStorage.clear();
		},
		/**
	     * 获取用户信息
	     */
		getUserInfo: function(){	
			this.get('$userInfo');
		},
		/**
	     * 获取用户ID
	     */
	    getUserId : function() {
	    	if(this.getUserInfo !== {}) return this.getUserInfo().dr_id;
	    },
	    /**
	     * 保存用户信息
	     */
	    setUserInfo : function(userInfo){
	    	localStorage.removeItem('$userInfo');
	    	var userInfo = userInfo || {};
	    	this.set('$userInfo', JSON.stringify(userInfo));
	    },
	    /**
	     * 清空用户信息
	     */
	    removeUserInfo : function(){
	    	localStorage.removeItem('$userInfo');
	    },
	    /**
	     * 获取骨研社用户信息
	     */
		getGyxUserInfo: function(){	
			this.get('$gysUserInfo');
		},
		/**
	     * 获取骨研社用户ID
	     */
	    getGyxUserId : function() {
	    	if(this.getGyxUserInfo !== {}) return this.getGyxUserInfo().actor_id;
	    },
	    /**
	     * 保存骨研社用户信息
	     */
	    setGyxUserInfo : function(userInfo){
	    	localStorage.removeItem('$gysUserInfo');
	    	var userInfo = userInfo || {};
	    	this.set('$gysUserInfo', JSON.stringify(userInfo));
	    },
	    /**
	     * 清空骨研社用户信息
	     */
	    removeGysUserInfo : function(){
	    	localStorage.removeItem('$gysUserInfo');
	    },
	}


	// Output
    // =============================================================================================	
	owner.n = net;
	owner.p = proxy;
	owner.s = storage;

}(mui, template, window.app = {}));
